a11y: Parse booleans in ui files as expected
authorMatthias Clasen <mclasen@redhat.com>
Sun, 25 Oct 2020 16:20:55 +0000 (12:20 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 25 Oct 2020 16:20:55 +0000 (12:20 -0400)
Accept the same syntax for booleans as GtkBuilder
does elsewhere.

gtk/gtkaccessiblevalue.c

index 5a4edd5d852883956e9af5f833c5ef13294d524d..c7ac423bd03cb88be2122a4f6be34c1dfd9c46e4 100644 (file)
@@ -45,6 +45,7 @@
 #include "gtkaccessiblevalueprivate.h"
 
 #include "gtkaccessible.h"
+#include "gtkbuilderprivate.h"
 #include "gtkenums.h"
 
 #include <math.h>
@@ -1344,38 +1345,25 @@ gtk_accessible_value_parse (const GtkAccessibleCollect  *cstate,
     {
     case GTK_ACCESSIBLE_COLLECT_BOOLEAN:
       {
-        if (strncmp (str, "true", 4) == 0)
-          res = gtk_boolean_accessible_value_new (TRUE);
-        else if (strncmp (str, "false", 5) == 0)
-          res = gtk_boolean_accessible_value_new (FALSE);
-        else if (collects_undef && strncmp (str, "undefined", 9) == 0)
+        gboolean b;
+
+        if (collects_undef && strncmp (str, "undefined", 9) == 0)
           res = gtk_undefined_accessible_value_new ();
-        else
-          g_set_error (error, GTK_ACCESSIBLE_VALUE_ERROR,
-                       GTK_ACCESSIBLE_VALUE_ERROR_INVALID_TOKEN,
-                       "Invalid token ā€œ%sā€ for boolean attribute",
-                       str);
+        else if (_gtk_builder_boolean_from_string (str, &b, error))
+          res = gtk_boolean_accessible_value_new (b);
       }
       break;
 
     case GTK_ACCESSIBLE_COLLECT_TRISTATE:
       {
-        if (strncmp (str, "true", 4) == 0)
-          res = gtk_tristate_accessible_value_new (GTK_ACCESSIBLE_TRISTATE_TRUE);
-        else if (strncmp (str, "false", 5) == 0)
-          res = gtk_tristate_accessible_value_new (GTK_ACCESSIBLE_TRISTATE_FALSE);
+        gboolean b;
+
+        if (collects_undef && strncmp (str, "undefined", 9) == 0)
+          res = gtk_undefined_accessible_value_new ();
         else if (strncmp (str, "mixed", 5) == 0)
           res = gtk_tristate_accessible_value_new (GTK_ACCESSIBLE_TRISTATE_MIXED);
-        else if (collects_undef && strncmp (str, "undefined", 9) == 0)
-          res = gtk_undefined_accessible_value_new ();
-        else
-          {
-            g_set_error (error, GTK_ACCESSIBLE_VALUE_ERROR,
-                         GTK_ACCESSIBLE_VALUE_ERROR_INVALID_TOKEN,
-                         "Invalid token ā€œ%sā€ for tristate attribute",
-                         str);
-            return NULL;
-          }
+        else if (_gtk_builder_boolean_from_string (str, &b, error))
+          res = gtk_boolean_accessible_value_new (b);
       }
       break;